﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Benchmark.Db.Base;
using System.Reflection;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;

namespace Benchmark.Db.Adapter.MsSql
{
    //public class NativeSqlConnector : IDbBenchmarkConnectionV1
    //{
    //    public string Name { get { return "Sql Server Connector"; } }
    //    public string Version { get { return "1.0"; } }
    //    private SqlConnection m_connection;

    //    private class PropertyColumnMap
    //    {
    //        static Dictionary<Type, String> PropertyMapTable = new Dictionary<Type, string>();

    //        public PropertyInfo PropertyInfo { get; set; }
    //        public string ColumnName { get; set; }
    //        public SqlDbType DbType { get; set; }
    //        public int Lenght { get; set; }
    //        public bool PrimaryKey { get; set; }

    //        static PropertyColumnMap()
    //        {
    //            PropertyMapTable.Add(typeof(int), "BIGINT");
    //            PropertyMapTable.Add(typeof(string), "NVARCHAR(500)");
    //            PropertyMapTable.Add(typeof(bool), "BIT");
    //            PropertyMapTable.Add(typeof(DateTime), "DATETIME");
    //            PropertyMapTable.Add(typeof(float), "FLOAT");
    //            PropertyMapTable.Add(typeof(decimal), "DECIMAL(18,0)");
    //            PropertyMapTable.Add(typeof(Guid), "UNIQUEIDENTIFIER");
    //        }

    //        public PropertyColumnMap(PropertyInfo propinfo)
    //        {
    //            this.PropertyInfo = propinfo;
    //            this.Map();
    //        }

    //        private void Map()
    //        {
    //            this.ColumnName = this.PropertyInfo.Name;

    //            Type propType = this.PropertyInfo.PropertyType;
    //            if (propType == typeof(string))
    //            {
    //                this.DbType = SqlDbType.VarChar;

    //                object[] attributes = this.PropertyInfo.GetCustomAttributes(typeof(LengthAttribute), true);
    //                if (attributes.Length > 0)
    //                {
    //                    LengthAttribute lengthAttribute = (LengthAttribute)attributes[0];
    //                    this.Lenght = lengthAttribute.Lenght;
    //                }

    //                attributes = this.PropertyInfo.GetCustomAttributes(typeof(PrimaryKeyAttribute), true);
    //                if (attributes.Length > 0)
    //                    this.PrimaryKey = true;
    //            }

    //            if(propType == typeof(int))
    //                this.DbType = SqlDbType.Int;

    //            if (propType == typeof(Int16))
    //                this.DbType = SqlDbType.SmallInt;

    //            if (propType == typeof(Int64))
    //                this.DbType = SqlDbType.BigInt;

    //            if (propType == typeof(byte))
    //                this.DbType = SqlDbType.TinyInt;

    //            if (propType == typeof(byte[]))
    //                this.DbType = SqlDbType.Binary;


    //        }

    //    }

    //    private void CreateTable(Type type)
    //    {
    //        PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty);

    //        foreach (PropertyInfo prop in properties) 
                
                
    //            ;
    //            //
    //    }

    //    public void Initialize(params Type[] recordTypes)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void EnsureIndex(Type type, params string[] columnNames)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void ClearDB()
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void Insert<T>(T[] records)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void BulkInsert<T>(T[] records)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void Load<T>(string keyColumnName, T[] keys)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void Update<T>(string keyColumnName, T[] records)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void BulkUpdate<T>(string keyColumnName, T[] records)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void Delete<T>(string keyColumnName, T[] records)
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void BeginTransaction()
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void CommitTransaction()
    //    {
    //        throw new NotImplementedException();
    //    }

    //    public void RollbackTransaction()
    //    {
    //        throw new NotImplementedException();
    //    }

    //}
}
